package com.tp2.etna.distribucion1.controller;

import java.lang.reflect.Array;
import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.List;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.tp2.etna.distribucion1.constante.GeneralConstante;
import com.tp2.etna.distribucion1.modelo.ClienteModel;
import com.tp2.etna.distribucion1.modelo.EntregaDetalleModel;
import com.tp2.etna.distribucion1.modelo.EntregaModel;
import com.tp2.etna.distribucion1.modelo.EstadoEntregaModel;
import com.tp2.etna.distribucion1.modelo.EstadoHojaRutaDetalleModel;
import com.tp2.etna.distribucion1.modelo.EstadoHojaRutaModel;
import com.tp2.etna.distribucion1.modelo.HojaRutaDetalleModel;
import com.tp2.etna.distribucion1.modelo.HojaRutaModel;
import com.tp2.etna.distribucion1.modelo.ZonaDespachoModel;
import com.tp2.etna.distribucion1.service.HojaRutaService;
import com.tp2.etna.distribucion1.service.ZonaDespachoService;

@Controller
public class HojaRutaController {

	@Autowired
	private HojaRutaService hojaRutaService;
	
	@Autowired
	private ZonaDespachoService zonaDespachoService;
	
	@RequestMapping(value = "/hojaRuta", method = RequestMethod.GET)
	public ModelAndView inicioHojaRuta(ModelMap model) {
		
		long diaMillis = 1000*60*60*24;
		long time = System.currentTimeMillis();
		Date fecha = new Date(time);
		Date fechaAyer = new Date(new java.util.Date().getTime() - diaMillis);
		
		List<HojaRutaModel> listaHojaRuta = hojaRutaService.listar(fecha,GeneralConstante.CADENA_VACIA, 0, 0);
		List<ZonaDespachoModel> listaZona = zonaDespachoService.listar();
		List<EstadoHojaRutaModel> listaEstadoHojaRuta = hojaRutaService.listarEstado();

		String flagHojaRuta = "S";
		String flagGenerar = "S";
		
		if(listaHojaRuta.size() == 0)
		{
			flagHojaRuta = "N";
			flagGenerar = "N";
			
		}
			
		ModelAndView modelo = new ModelAndView("dist1_hojasRuta", "lista",
				listaHojaRuta);
		modelo.addObject("ayer",fechaAyer);
		modelo.addObject("fecha",fecha);
		modelo.addObject("listaHojaRuta", listaHojaRuta);
		modelo.addObject("listaZona", listaZona);
		modelo.addObject("listaEstadoHojaRuta", listaEstadoHojaRuta);
		modelo.addObject("flagHojaRuta", flagHojaRuta);
		modelo.addObject("numero", GeneralConstante.CADENA_VACIA);
		modelo.addObject("idZonaDespacho", 0);
		modelo.addObject("idEstadoHojaRuta", 0);
		modelo.addObject("flagGenerar", flagGenerar);

		return modelo;

	}
	
	@RequestMapping(value = "/hojaRutas", method = RequestMethod.GET)
	public ModelAndView buscarHojaRuta(HttpServletRequest rq) {
		
		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
		java.util.Date date1 = null;
		
		
		try {
			date1 = sdf1.parse(rq.getParameter("dtpFechaInicio"));
			
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		Date fi = new Date(date1.getTime());
		
		String hr = rq.getParameter("numeroHoja");
		Integer zd = Integer.parseInt(rq.getParameter("zona"));
		Integer eh = Integer.parseInt(rq.getParameter("estadoHojaRuta"));

		List<HojaRutaModel> listaHojaRuta = hojaRutaService.listar(fi,hr, zd, eh);
		List<ZonaDespachoModel> listaZona = zonaDespachoService.listar();
		List<EstadoHojaRutaModel> listaEstadoHojaRuta = hojaRutaService.listarEstado();

		
		String flagHojaRuta = "S";
		String flagGenerar = "S";
		
		if(listaHojaRuta.size() == 0)
		{
			flagHojaRuta = "N";
			flagGenerar = "N";
			
		}
		
		ModelAndView modelo = new ModelAndView("dist1_hojasRuta", "lista",
				listaHojaRuta);
		
		modelo.addObject("fecha",fi);
		modelo.addObject("listaHojaRuta", listaHojaRuta);
		modelo.addObject("listaZona", listaZona);
		modelo.addObject("listaEstadoHojaRuta", listaEstadoHojaRuta);
		modelo.addObject("idZonaDespacho", zd);
		modelo.addObject("idEstadoHojaRuta", eh);
		modelo.addObject("numero", hr);
		modelo.addObject("flagHojaRuta", flagHojaRuta);
		modelo.addObject("flagGenerar", flagGenerar);

		return modelo;

	}
	
	@RequestMapping(value = "/hojaRutaOperacion", method = RequestMethod.GET)
	public ModelAndView redirigirHojaRuta(ModelMap model
										,@RequestParam String operacion
										,@RequestParam Integer codigo
										,@RequestParam String numeroHoja
										,@RequestParam Date fecha
										,@RequestParam String zonaDespacho
										,@RequestParam String estadoHoja
										) {
		
		String vista = "dist1_hojasRutas";
				
		List<HojaRutaDetalleModel> listaDetalle = hojaRutaService.listarHojaRutaDetalle(codigo);
		List<EstadoHojaRutaDetalleModel> listaEstadoHojaRutaDetalle = hojaRutaService.listarEstadoDetalle();
		
		if(operacion.equals("ver"))
		{
			vista = "dist1_hojaRutaVer";
		}else if(operacion.equals("mod"))
		{
			vista = "dist1_hojaRutaModifica";
		}else if(operacion.equals("eli"))
		{
			vista = "dist1_hojaRutaElimina";
		}else
		{
			vista = "dist1_hojasRutas";
		}
			
		ModelAndView modelo = new ModelAndView(vista);
		modelo.addObject("listaDetalle", listaDetalle);
		modelo.addObject("codigo", codigo);
		modelo.addObject("numeroHoja", numeroHoja);
		modelo.addObject("fecha", fecha);
		modelo.addObject("zonaDespacho", zonaDespacho);
		modelo.addObject("estadoHojaRuta", estadoHoja);
		modelo.addObject("listaEstadoHojaRutaDetalle", listaEstadoHojaRutaDetalle);

		return modelo;

	}
	
	@RequestMapping(value = "/hojaRuta/eliminar", method = RequestMethod.GET)
	public String eliminarHojaRuta(HttpServletRequest rq) {
		
		Integer ih = Integer.parseInt(rq.getParameter("ih"));
		
		hojaRutaService.eliminarHojaRuta(ih);
			
		return "redirect:/hojaRuta";

	}
	
	@RequestMapping(value = "/hojaRuta/modificar", method = RequestMethod.GET)
	public String modificarHojaRuta(HttpServletRequest rq) {
		
		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
		java.util.Date date1 = null;
		
		try {
			date1 = sdf1.parse(rq.getParameter("fecha"));
			Date fecha = new Date(date1.getTime());
			Integer ih = Integer.parseInt(rq.getParameter("ih"));
			hojaRutaService.modificarHojaRuta(fecha, "", ih);
			
			List<HojaRutaDetalleModel> listaDetalle = hojaRutaService.listarHojaRutaDetalle(ih);
			
			for (HojaRutaDetalleModel detalle : listaDetalle) {
								
				Integer estadoDetalleID = Integer.parseInt(rq.getParameter(detalle.getIdHojaRutaDetalle().toString()));
				
				hojaRutaService.modificarDetalleHojaRuta(estadoDetalleID, detalle.getIdHojaRutaDetalle());
			}
			
			
			
		
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		return "redirect:/hojaRuta";

	}

	@RequestMapping(value = "/generarHojaRuta", method = RequestMethod.GET)
	public ModelAndView generarEntrega(ModelMap model
										) {
		
		String vista = "dist1_hojaRutaGenerar";
				
		ModelAndView modelo = new ModelAndView(vista);
		

		return modelo;

	}
	
	@RequestMapping(value="/procesarHojasRuta", method = RequestMethod.POST,produces={"application/json"})
	public @ResponseBody Integer  generarHojasRuta() {
		
		long diaMillis = 1000*60*60*24;
		long time = System.currentTimeMillis();
		Date fecha = new Date(time);
		Date fechaAyer = new Date(new java.util.Date().getTime() - (diaMillis*2));
		
	
		
		boolean resultado = false;
		int res = 0;
		
		resultado = hojaRutaService.generarHojaRuta(fechaAyer, fecha);
		
		
		res = 1;
		
		return res;
	}

}
